/*
 * hm_interaction.c
 *
 *  Created on: 2021年11月18日
 *      Author: CameronLee
 */

#include "hm_interaction.h"


volatile float UI_Environment_Temperature;
volatile float UI_BOX_Temperature;
volatile float UI_Measurement_Data;
volatile float UI_Heat_P;

extern osEventFlagsId_t SysStatusFlagHandle;
extern osMutexId_t DataAcquireMutexHandle;

void LCD_Show_Background(void)
{
	char dispBuff[128];
		char *pStr = 0;

		LCD_SetBackColor(BLACK);
		ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH);	/* 清屏，显示全黑 */

		/*         标题  黄色 TEST                        */
		LCD_SetTextColor(YELLOW);
		LCD_SetFont(&Font24x32);	//设置字体大小
		pStr = "TEST";
		//居中时，要插入的空格个数 = (液晶宽度/单个字体宽度 - 字符串长度)/2
		sprintf(dispBuff,"%*c%s",((LCD_X_LENGTH/(((sFONT *)LCD_GetFont())->Width))-strlen(pStr))/2,' ',pStr);
		LCD_ClearLine(LINE(0));													// 清除单行文字
		ILI9341_DispStringLine_EN_CH(LINE(0),dispBuff);//显示格式化后的字符串

		/*下面显示小标题 绿色 不刷新 */
		LCD_SetTextColor(GREEN);
		LCD_SetFont(&Font8x16);

		//  显示 空4个空格 绿色 “设定温度：”
		pStr = "设定温度(℃)：";
		sprintf(dispBuff,"%*c%s",4,' ',pStr);
		ILI9341_DispStringLine_EN_CH(LINE(3),dispBuff);

		//   显示 空4个空格 绿色 “环境温度：”
		pStr = "环境温度(℃)：";
		sprintf(dispBuff,"%*c%s",4,' ',pStr);
		ILI9341_DispStringLine_EN_CH(LINE(6),dispBuff);

		//   显示 空4个空格 绿色 “恒温箱温度：”
		pStr = "恒温箱温度(℃)：";
		sprintf(dispBuff,"%*c%s",4,' ',pStr);
		ILI9341_DispStringLine_EN_CH(LINE(9),dispBuff);

		//  显示 空4个空格 绿色 “加热功率：”
		pStr = "加热功率(W)：";
		sprintf(dispBuff,"%*c%s",4,' ',pStr);
		ILI9341_DispStringLine_EN_CH(LINE(12),dispBuff);

		pStr = "微波辐射计数据采集(V)：";
		sprintf(dispBuff,"%*c%s",4,' ',pStr);
		ILI9341_DispStringLine_EN_CH(LINE(15),dispBuff);

		/*     配置好数据的显示规格   */
		//LCD_SetFont(&Font16x24);
		LCD_SetColors(RED,BLACK);


}


void CurrentDataShow(void)
{
	//while(osMutexAcquire(DataAcquireMutexHandle,1000));

	char dispBuff[128];
	//环境温度
	sprintf(dispBuff,"           %.3f ",UI_Environment_Temperature);
	LCD_ClearLine(LINE(7));
	ILI9341_DispStringLine_EN_CH(LINE(7),dispBuff);

	//恒温箱温度
	sprintf(dispBuff,"           %.3f ",UI_BOX_Temperature);
	LCD_ClearLine(LINE(10));
	ILI9341_DispStringLine_EN_CH(LINE(10),dispBuff);

	//采集电压
	sprintf(dispBuff,"          %.3f ",(float)ADC_ConvertedValue/4096*3.3f);
	LCD_ClearLine(LINE(16));
	ILI9341_DispStringLine_EN_CH(LINE(16),dispBuff);

	//设定温度显示更新 在其更改时才更新！
	//加热功率显示在控制任务中显示，以免发生资源冲突，这样做纯粹是节约内存空间！实在是不够用了！

}

void UI_Set_Temperature(float t)
{
	char dispBuff[128];
	//指定温度值
	sprintf(dispBuff,"           %.2f ",t);
	LCD_ClearLine(LINE(4));
	ILI9341_DispStringLine_EN_CH(LINE(4),dispBuff);
}

void UI_Heat_Power(void)
{
	char dispBuff[128];
	//加热功率
	sprintf(dispBuff,"           %.3f ",UI_Heat_P);
	LCD_ClearLine(LINE(13));
	ILI9341_DispStringLine_EN_CH(LINE(13),dispBuff);
}


void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == KEY2_Pin)
	{
		HAL_Delay(10);
		if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_SET)
		{
			Target_Temperature++;
			osEventFlagsSet(SysStatusFlagHandle,0x01);
		}
	}

	if(GPIO_Pin == KEY1_Pin)
	{
		HAL_Delay(10);
		if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_SET)
		{
			Target_Temperature--;
			osEventFlagsSet (SysStatusFlagHandle,0x01);
		}
	}

}
